#include <stdbool.h>
#include <stdio.h>

bool is_odd(int n) {
	// return n % 2;	// -1, 0, 1
	return n & 0x1;
}

bool powerOf2(int n) {
	//int x = 1;	// 1, 2, 4, 8, ...
	//while (x < n) {
	//	x <<= 1;
	//}
	//// x >= n
	//return x == n;

	return (n & n - 1) == 0;
}

int lastSetBit(int n) {
	return n & -n;
}

int main(void) {
	/*int i = -1;
	printf("is_odd(%d): %s\n", i, is_odd(i) ? "true" : "false");*/

	//int a = 3, b = 4;

	//a = a ^ b;	// a1 = a0 ^ b0, b1 = b0
	//b = a ^ b;	// a2 = a0 ^ b0, b2 = a1 ^ b1 = a0 ^ b0 ^ b0 = a0
	//a = a ^ b;  // a3 = a2 ^ b2 = a0 ^ b0 ^ a0 = b0, b3 = b2 = a0

	//printf("a = %d, b = %d\n", a, b);

	//int nums[] = {1, 4, 2, 1, 2}; // a ^ 4

	//int result = 0;
	//for (int i = 0; i < 5; i++) {
	//	result ^= nums[i];
	//}

	//printf("result = %d\n", result);


	// a, _,_, _,_
	// b, _,_, _,_
	int nums[] = { 1, 2, 1, 3, 2, 5 };

	int xor = 0; 
	for (int i = 0; i < 6; i++) {
		xor ^= nums[i];
	}
	// xor = a ^ b   (xor != 0)
	int lastSetBit = xor &(-xor);  // lastSetBit是2的幂

	int a = 0, b = 0;
	for (int i = 0; i < 6; i++) {
		if (nums[i] & lastSetBit) {
			// lastSetBit Ϊ 1
			b ^= nums[i];
		} else {
			// lastSetBit Ϊ 0
			a ^= nums[i];
		}
	}

	printf("a = %d, b = %d\n", a, b);

	return 0;
}